- Notifications
You must be signed in to change notification settings - Fork 5.8k
/
Copy path1079. Letter Tile Possibilities.go
63 lines (58 loc) · 1.24 KB
/
1079. Letter Tile Possibilities.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package leetcode
// 解法一 DFS
funcnumTilePossibilities(tilesstring) int {
m:=make(map[byte]int)
fori:=rangetiles {
m[tiles[i]]++
}
arr:=make([]int, 0)
for_, v:=rangem {
arr=append(arr, v)
}
returnnumTileDFS(arr)
}
funcnumTileDFS(arr []int) (rint) {
fori:=0; i<len(arr); i++ {
ifarr[i] ==0 {
continue
}
r++
arr[i]--
r+=numTileDFS(arr)
arr[i]++
}
return
}
// 解法二 DFS 暴力解法
funcnumTilePossibilities1(tilesstring) int {
res, tmp, tMap, used:=0, []byte{}, make(map[string]string, 0), make([]bool, len(tiles))
findTile([]byte(tiles), tmp, &used, 0, &res, tMap)
returnres
}
funcfindTile(tiles, tmp []byte, used*[]bool, indexint, res*int, tMapmap[string]string) {
flag:=true
for_, v:=range*used {
ifv==false {
flag=false
break
}
}
ifflag {
return
}
fori:=0; i<len(tiles); i++ {
if (*used)[i] ==true {
continue
}
tmp=append(tmp, tiles[i])
(*used)[i] =true
if_, ok:=tMap[string(tmp)]; !ok {
//fmt.Printf("i = %v tiles = %v 找到了结果 = %v\n", i, string(tiles), string(tmp))
*res++
}
tMap[string(tmp)] =string(tmp)
findTile([]byte(tiles), tmp, used, i+1, res, tMap)
tmp=tmp[:len(tmp)-1]
(*used)[i] =false
}
}